package com.aibaixun.web.controller.system;

import com.aibaixun.common.core.domain.R;
import com.aibaixun.system.domain.TpType;
import com.aibaixun.system.domain.TpTypeData;
import com.aibaixun.system.domain.TpTypeField;
import com.aibaixun.system.domain.dto.TpTypeDataPageDto;
import com.aibaixun.system.domain.dto.TpTypeFieldBatchDto;
import com.aibaixun.system.domain.dto.TpTypeFieldPageDto;
import com.aibaixun.system.domain.vo.TpTypeListVo;
import com.aibaixun.system.service.TpTypeService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * 拓扑类别管理模块
 *
 * @author zhangyh
 * @date 2024-06-12
 **/
@RestController
@RequestMapping("/topology/type" )
public class TpTypeFieldController {

    @Autowired
    private TpTypeService tpTypeService;

    /**
     * 获取类别领域列表
     * @return
     */
    @ApiOperation(value = "获取类别领域列表")
    @GetMapping("/area/list")
    public R getAreaList() {
        return tpTypeService.getAreaList();
    }

    /**
     * 新增类别
     * @return
     */
    @ApiOperation(value = "新增类别")
    @PostMapping("/add")
    public R saveType(@RequestBody TpType dto) {
        return tpTypeService.saveType(dto);
    }

    /**
     * 编辑类别
     * @return
     */
    @ApiOperation(value = "编辑类别")
    @PostMapping("/update")
    public R updateType(@RequestBody TpType dto) {
        return tpTypeService.updateType(dto);
    }

    /**
     * 删除类别
     * @return
     */
    @ApiOperation(value = "删除类别")
    @GetMapping("/delete/{typeId}")
    public R deleteType(@PathVariable(value = "typeId") Long typeId) {
        return tpTypeService.deleteType(typeId);
    }

    /**
     * 查询类别
     * @return
     */
    @ApiOperation(value = "查询类别")
    @PostMapping("/list")
    public R<List<TpTypeListVo>> listType(@RequestBody TpType dto) {
        return tpTypeService.listType(dto);
    }

    /**
     * 新增类别字段
     * @return
     */
    @ApiOperation(value = "新增类别字段")
    @PostMapping("/field/add")
    public R saveTypeField(@RequestBody TpTypeField dto) {
        return tpTypeService.saveTypeField(dto);
    }

    /**
     * 批量新增类别字段
     * @return
     */
    @ApiOperation(value = "批量新增类别字段")
    @PostMapping("/field/add/batch")
    public R saveTypeFieldBatch(@RequestBody TpTypeFieldBatchDto dto) {
        return tpTypeService.saveTypeFieldBatch(dto);
    }

    /**
     * 编辑类别字段
     * @return
     */
    @ApiOperation(value = "编辑类别字段")
    @PostMapping("/field/update")
    public R updateTypeField(@RequestBody TpTypeField dto) {
        return tpTypeService.updateTypeField(dto);
    }

    /**
     * 删除类别字段
     * @return
     */
    @ApiOperation(value = "删除类别字段")
    @GetMapping("/field/delete/{fieldId}")
    public R deleteTypeField(@PathVariable(value = "fieldId") Long fieldId) {
        return tpTypeService.deleteTypeField(fieldId);
    }

    /**
     * 类别字段分页
     * @return
     */
    @ApiOperation(value = "类别字段分页")
    @PostMapping("/field/page")
    public R<Page<TpTypeField>> getTypeFieldPage(@RequestBody TpTypeFieldPageDto pageDto){
        Page page = new Page();
        page.setCurrent(pageDto.getCurrent());
        page.setSize(pageDto.getSize());
        page.setSearchCount(true);
        return tpTypeService.getTypeFieldPage(page, pageDto);
    }


    /**
     * 新增明细数据
     * @return
     */
    @ApiOperation(value = "新增明细数据")
    @PostMapping("/data/add")
    public R saveTypeData(@RequestBody TpTypeData dto) {
        return tpTypeService.saveTypeData(dto);
    }

    /**
     * 编辑明细数据
     * @return
     */
    @ApiOperation(value = "编辑明细数据")
    @PostMapping("/data/update")
    public R updateTypeData(@RequestBody TpTypeData dto) {
        return tpTypeService.updateTypeData(dto);
    }

    /**
     * 删除明细数据
     * @return
     */
    @ApiOperation(value = "删除明细数据")
    @GetMapping("/data/delete/{dataId}")
    public R deleteTypeData(@PathVariable(value = "dataId") Long dataId) {
        return tpTypeService.deleteTypeData(dataId);
    }

    /**
     * 明细数据分页
     * @return
     */
    @ApiOperation(value = "明细数据分页")
    @PostMapping("/data/page")
    public R<Page<TpTypeData>> getTypeDataPage(@RequestBody TpTypeDataPageDto pageDto){
        Page page = new Page();
        page.setCurrent(pageDto.getCurrent());
        page.setSize(pageDto.getSize());
        page.setSearchCount(true);
        return tpTypeService.getTypeDataPage(page, pageDto);
    }

}
